<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="../引入vue2.js"></script>
    <title>Document</title>
    <style>
        .test {
            width: 100px;
            height: 100px;
            background-color: yellow;
        }

        .v-enter {
            opacity: 0;
        }

        .v-enter-active {
            transition: all 3s;
        }

        .v-enter-to {
            opacity: 1;
        }

        .v-leave {
            opacity: 1;
        }

        .v-leave-active {
            transition: all 3s;
        }

        .v-leave-to {
            opacity: 0;
        }

        .first-enter {
            opacity: 0;
        }

        .first-enter-active {
            transition: all 3s;
        }

        .first-enter-to {
            opacity: 1;
        }

        .first-leave {
            opacity: 1;
        }

        .first-leave-active {
            transition: all 3s;
        }

        .first-leave-to {
            opacity: 0;
        }

        .second-enter {
            opacity: 0;
            transform: translateX(300px);
        }

        .second-enter-active {
            transition: all 3s;
        }

        .second-enter-to {
            opacity: 1;
            transform: translateX(0);
        }

        .second-leave {
            opacity: 1;
            transform: translateX(0);
        }

        .second-leave-active {
            transition: all 3s;
        }

        .second-leave-to {
            opacity: 0;
            transform: translateX(300px);
        }
    </style>
</head>

<body>
    <div id="app">
        <button @click="show=!show">显示/隐藏</button>

        <transition name="first">
            <div class="test" v-show="show"></div>
        </transition>
        <transition name="second">
            <div class="test" v-show="show"></div>
        </transition>
    </div>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                show: true,
            },
            methods: {},
        });

        // 总结：
        // 通过transition过渡组件，结合内置6个过渡类名实现动画效果。也可以通过name属性自定义类名前缀解决多个transition过渡组件冲突问题。
        // 语法：
        /*
        <transition name="first">
          单组件/元素
        </transition>
        */

        /* 
        在进入/离开的过渡中，会有 6 个 class 切换。

        1.  v-enter：定义进入过渡的开始状态。在元素被插入之前生效，在元素被插入之后的下一帧移除。

        2.  v-enter-active：定义进入过渡生效时的状态。在整个进入过渡的阶段中应用，在元素被插入之前生效，在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间，延迟和曲线函数。

        3.  v-enter-to：2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除)，在过渡/动画完成之后移除。

        4.  v-leave：定义离开过渡的开始状态。在离开过渡被触发时立刻生效，下一帧被移除。

        5.  v-leave-active：定义离开过渡生效时的状态。在整个离开过渡的阶段中应用，在离开过渡被触发时立刻生效，在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间，延迟和曲线函数。

        6.  v-leave-to：2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除)，在过渡/动画完成之后移除。
        

        对于这些在过渡中切换的类名来说，如果你使用一个没有名字的 <transition>，则 v- 是这些类名的默认前缀。如果你使用了 <transition name="my-transition">，那么 v-enter 会替换为 my-transition-enter。

        v-enter-active 和 v-leave-active 可以控制进入/离开过渡的不同的缓和曲线，在下面章节会有个示例说明。
        */
    </script>
</body>

</html>